调试模板时，会遇到两类挑战。对于模板编写者来说，有一类挑战无疑是一个问题:如何确保所编写的模板对满足条件的模板参数都能起作用?另一类问题几乎完全相反:当模板的行为与文档中描述的不一致时，模板的用户如何找出不满足哪些模板参数要求?

深入讨论这些问题之前，考虑一下可能施加在模板参数上的各种约束。本章中，我们主要处理导致编译错误的约束，称其为语法约束。语法约束包括特定类型构造函数的存在，特定函数调用的无歧义性等。另一种约束称之为语义约束，要验证这些约束条件非常困难。通常，这样做甚至可能不实际，可能要求在模板类型参数上定义一个小于操作符(这是一种语法约束)，但通常也会要求操作符实际上在其域上定义某种排序(这是一种语义约束)。

术语概念通常用来表示模板库中需要的一组约束，C++标准库依赖于随机访问迭代器和默认可构造函数等概念。有了这个术语，调试模板代码包含了大量确定在模板实现，及其使用中如何违反概念的工作。本章深入探讨了设计和调试技术，这些技术可以让模板的作者和用户更容易地使用模板。